package com.train.course.controller;

import com.train.common.core.controller.BaseController;
import com.train.common.core.domain.AjaxResult;
import com.train.common.service.MinioService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 资源访问控制器
 * 提供基于认证的有时限URL下发功能，兼容VideoUploadController和PostController上传的资源
 */
@RestController
@RequestMapping("/course/resource")
public class ResourceAccessController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(ResourceAccessController.class);

    @Autowired
    private MinioService minioService;

    /**
     * 获取资源访问URL
     * 直接接收objectName参数，不再需要从permanentUrl中提取
     * @param resourceType 资源类型 (video/course-video, cover/course-cover, episode-cover, action-video, action-cover, post-image)
     * @param resourceId 资源ID (根据资源类型可能是courseId, episodeId, actionId或postId)
     * @param objectName 资源对象名称
     * @param expires 过期时间（分钟），默认30分钟
     * @return 包含临时访问URL的响应
     */
    @GetMapping("/url")
    public AjaxResult getResourceUrl(String resourceType, String resourceId, String objectName, Integer expires) {
        try {
            // 验证必要参数
            if (objectName == null || objectName.trim().isEmpty()) {
                return AjaxResult.error("资源对象名称不能为空");
            }

            // 权限验证 - 由于课程全部免费，这里简化验证逻辑
            // 实际应用中可以根据需要添加更复杂的权限检查
            if (!checkResourcePermission(resourceType, resourceId)) {
                return AjaxResult.error("没有访问权限");
            }
            

            // 设置默认过期时间为30分钟
            if (expires == null || expires <= 0) {
                expires = 30;
            }

            // 生成有时限的预签名URL
            String presignedUrl = minioService.getPresignedUrl(objectName, expires);

            return AjaxResult.success(presignedUrl);
        } catch (Exception e) {
            logger.error("生成资源访问URL失败", e);
            return AjaxResult.error("生成资源访问URL失败: " + e.getMessage());
        }
    }

    /**
     * 检查资源访问权限
     * 由于所有课程都是免费的，这里简化为始终返回true
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 是否有权限访问
     */
    private boolean checkResourcePermission(String resourceType, String resourceId) {
        // 课程全部免费，所有用户都能访问
        // 实际应用中可以根据需要添加用户认证和更复杂的权限检查
        return true;
    }

  
}